package cn.hp.cms.service.impl;

import cn.hp.cms.dao.UserDao;
import cn.hp.cms.dao.impl.UserDaoImpl;
import cn.hp.cms.entity.User;
import cn.hp.cms.service.UserService;
import cn.hp.cms.utils.Constant;
import cn.hp.cms.utils.PageData;
import cn.hp.cms.utils.ResultData;
import cn.hutool.core.util.StrUtil;
import com.sun.xml.internal.bind.v2.runtime.reflect.opt.Const;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

// 用户模块的业务层  基于dao层
public class UserServiceImpl implements UserService {

    private UserDao userDao = new UserDaoImpl();

    @Override
    public ResultData login(String userName, String password , String checkCode , HttpServletRequest req) {
//      判断验证码是否正确
        if (checkCode.equals(req.getSession().getAttribute("checkCode"))){
//          验证码正确， 验证账号 密码
            if (userDao.selectOneByNameAndPassword(userName,password)){
                req.getSession().setAttribute("user",userName);
                return ResultData.success(Constant.LOGIN_SUCCESS_MSG);
            } else {
                return  ResultData.fail(Constant.LOGIN_FAIL_CODE,Constant.LOGIN_FAIL_MSG);
            }
        }else {
            return  ResultData.fail(Constant.CHECK_CODE_FAIL_CODE,Constant.CHECK_CODE_FAIL_MSG);
        }
    }

    @Override
    public List<User> getAllUsers() {
        return userDao.selectAll();
    }

    //    返回给servlet的是pageData对象
    @Override
    public PageData getPageData(PageData pageData, User user) {
//        将pageData补充完整
//        设置总条数 19
        int counts = userDao.selectAllCount(user);
        pageData.setTotalCount(counts);
        pageData.setTotalPages(); // 自动设置总页数
//        获取分页中的数据
        List<User> users = userDao.selectAllByLimit(pageData,user);
//        将数据设置到分页对象中
        pageData.setData(users);
        return pageData;
    }

    @Override
    public ResultData resetPassword(int id) {
//        通过id修改密码
        int count = userDao.updatePasswordById(id);
        if (count > 0 ){
            return ResultData.success(Constant.UPDATE_PASSWORD_SUCCESS_MSG);
        }else {
            return ResultData.fail(Constant.UPDATE_PASSWORD_FAIL_CODE , Constant.UPDATE_PASSWORD_FAIL_MSG);
        }
    }

//    通过id删除用户
    @Override
    public ResultData delteUser(String[] ids) {
//        需要删除多个id时，可能造成 事物问题
//        将sql变成一条执行， 要么开启事物
        int count = userDao.deleteById(ids);
        if (count > 0 ){
            return ResultData.success(Constant.UPDATE_PASSWORD_SUCCESS_MSG);
        }else {
            return ResultData.fail(Constant.UPDATE_PASSWORD_FAIL_CODE , Constant.UPDATE_PASSWORD_FAIL_MSG);
        }
    }

//    新增用户
    @Override
    public ResultData addUser(User user) {
//        判断当前用户名是否重复
        User userData = userDao.selectByName(user.getUserName());
        if (userData != null && userData.getUserName() != null && !userData.getUserName().equals("") ){ // 判断查询出来的数据非空
//            返回错误数据，当前用户名已存在
            return ResultData.fail(Constant.ADD_USER_FAIL_CODE , Constant.ADD_USER_FAIL_MSG);
        }else {
            int count = userDao.Add(user);
            if (count > 0 ){
                return ResultData.success(Constant.ADD_USER_SUCCESS_MSG);
            }else {
                return ResultData.fail(Constant.ADD_FAIL_CODE , Constant.ADD_FAIL_MSG);
            }
        }
    }

    @Override
    public ResultData updatePassword(String username, String password, String newPassword) {
//        修改用户密码业务逻辑
//        1. 判断原密码是否正确
        boolean flag = userDao.selectOneByNameAndPassword(username, password);
//        密码正确
        if (flag){
//            修改密码
            int count = userDao.updatePasswordByName(username,newPassword);
            if (count > 0){
                return ResultData.success("修改密码成功");
            }else {
                return ResultData.fail(505,"修改失败");
            }
        }else {  // 原密码错误
            return  ResultData.fail(506,"原密码输入错误！");
        }
    }

//    保存用户头像
    @Override
    public ResultData updateImg(String user, String imgPath) {
        int count = userDao.updateImgByName(user, imgPath);
        if (count > 0){
            return ResultData.success("修改头像成功");
        }else {
            return ResultData.fail(507,"修改头像失败");
        }
    }

//    查询用户头像，然后返回
    @Override
    public ResultData selectUserImg(String userName) {
        String imgPath = userDao.selectImgByName(userName);
        if (StrUtil.isEmpty(imgPath)){ //头像内容为空 或者 ""
            return ResultData.fail(508,"未设置头像");
        }else {
            return ResultData.successData("",imgPath);
        }
    }
}
